package com.jiufen.Utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Map;


@Component  //必须被spring 容器管理 才可以获取value yml 参数
@Slf4j
public class JwtUtils {

    /**
     * yml中获取密钥和过期时间
     */
    @Value("${jwt.secret}")
    public  String secret;
    @Value("${jwt.expiration}")
    public Long expiration;


    /**
     * 生成JWT令牌
     */
    public  String createJwt(Map<String,Object> claims) {
        log.debug("secret--{}",secret);
        log.debug("expiration--{}",expiration);
        String jwt = Jwts.builder()  // 创建JWT的构建器
                .signWith(SignatureAlgorithm.HS256, secret)   // 使用HS256算法和密钥生成签名
                .addClaims(claims)  // 添加自定义属性
                .setExpiration(new java.util.Date(System.currentTimeMillis() + expiration))   // 设置过期时间
                .compact();   // 生成JWT令牌
        return jwt;
    }


    /**
     * 解析JWT令牌
     */
    public  Map<String, Object> parseJwt(String jwt) {
        Map<String, Object> claims = Jwts.parser()  // 创建JWT解析器
                .setSigningKey(secret)  // 设置签名密钥
                .parseClaimsJws(jwt)  // 解析JWT令牌
                .getBody();  // 获取自定义属性
        return claims;
    }

}
